//
//  JPBaseViewController.h
//  JPProjectConfigureDemo
//
//  Created by Carpenter on 2018/2/6.
//  Copyright © 2018年 carpenter. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>


@interface JPBaseViewController : UIViewController
<
UITableViewDelegate,
UITableViewDataSource,
DZNEmptyDataSetDelegate,
DZNEmptyDataSetSource
>

/**
 * @brief 页面数据大小
 *
 * @discussion 默认dataPageNum = 10
 */
@property (nonatomic ,assign)int dataPageNum;

/*!
 * @brief 数据页面索引
 *
 * @discussion 默认dataPageIndex = 1
 */
@property (nonatomic ,assign)int dataPageIndex;

/**
 * 表格数据源
 */
@property (nonatomic ,strong)NSMutableArray * sourceArrayM;

/**
 * @brief 表格
 *
 * @discussion 默认Group样式，如需适应plain样式请使用(initWithTableStyle:)初始化控制器
 *
 */
@property (nonatomic ,strong)UITableView * tableView;

/**
 * @brief 通知上级页面进行对应操作回调
 *
 * @discussion 当前控制器需要上级控制器同步进行相关操作
 */
@property (nonatomic ,copy) void (^currentControllerOperationBlock)(id data);



/**
 * @brief 构建自定义样式表格的控制器
 *
 * @param tableStyle 表格样式
 *
 * @return 当前控制器
 */
-(instancetype)initWithTableStyle:(UITableViewStyle)tableStyle;


/**
 * @brief 配置当前控制器必要的信息
 *
 * @discussion 1. 调用时机：在视图控制器已加载视图层次到内存后调用(即在‘viewDidLoad’内部调用)
 *
 * @discussion 2. 调用顺序：jp_configure > jp_overloadNavItems > jp_setupUI > jp_requestData
 */
-(void)jp_configure NS_REQUIRES_SUPER;


/**
 * @brief 重载当前控制器的导航栏
 *
 * @discussion 1. 调用时机：在视图控制器已加载视图层次到内存后调用(即在‘viewDidLoad’内部调用)
 *
 * @discussion 2. 调用顺序：jp_configure > jp_overloadNavItems > jp_setupUI > jp_requestData
 */
-(void)jp_overloadNavItems NS_REQUIRES_SUPER;


/**
 * @brief 绘制控制器界面
 *
 * @discussion 1. 调用时机：在视图控制器已加载视图层次到内存后调用(即在‘viewDidLoad’内部调用)
 *
 * @discussion 2. 调用顺序：jp_configure > jp_overloadNavItems > jp_setupUI > jp_requestData
 */
-(void)jp_setupUI NS_REQUIRES_SUPER;


/**
 * @brief 获取控制器需要的网络数据
 *
 * @discussion 1. 调用时机：在视图控制器已加载视图层次到内存后调用(即在‘viewDidLoad’内部调用)
 *
 * @discussion 2. 调用顺序：jp_configure > jp_overloadNavItems > jp_setupUI > jp_requestData
 */
-(void)jp_requestData NS_REQUIRES_SUPER;


/**
 * @brief 是否需要隐藏导航栏
 *
 * @discussion 默认不隐藏，子类可以重写
 *
 * @return 是/否
 */
-(BOOL)jp_isNeedHiddenNavigationBar;

@end
